package com.jxin.mall.weixin.domain.handler;

import com.jxin.mall.weixin.domain.service.WxPortalMsgService;
import com.jxin.mall.weixin.domain.builder.TextBuilder;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Map;

/**
 * @author Binary Wang(https://github.com/binarywang)
 */
@Component
@Slf4j
public class MsgHandler extends AbstractHandler {
    @Resource(name = "wxPortalMsgService")
    private WxPortalMsgService wxPortalMsgService;


    @Override
    public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
                                    Map<String, Object> context, WxMpService weixinService,
                                    WxSessionManager sessionManager) {

/*        if (!wxMessage.getMsgType().equals(XmlMsgType.EVENT)) {
            //TODO 可以选择将消息保存到本地
        }*/

        //当用户输入关键词如“你好”，“客服”等，并且有客服在线时，把消息转发给在线客服
        try {
            if (StringUtils.startsWithAny(wxMessage.getContent(), "你好", "客服")
                && weixinService.getKefuService()
                                .kfOnlineList()
                                .getKfOnlineList()
                                .size() > 0) {
                return WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE()
                                        .fromUser(wxMessage.getToUser())
                                        .toUser(wxMessage.getFromUser()).build();
            }
            return TextBuilder.getTextBuilder()
                              .build(wxPortalMsgService.routeOutMsg(wxMessage.getContent().trim()),
                                     wxMessage,
                                     weixinService);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }

        return TextBuilder.getTextBuilder().build("您的意思不能理解", wxMessage, weixinService);

    }

}
